package 栈;

import java.util.Deque;
import java.util.LinkedList;

/**
 * push(x) —— 将元素 x 推入栈中。
 * pop()—— 删除栈顶的元素。
 * top()—— 获取栈顶元素。
 * getMin() —— 检索栈中的最小元素。
 * <p>
 * 链接：https://leetcode-cn.com/problems/min-stack
 */
class _155_最小栈 {

    private Deque<Integer> xStack;
    private Deque<Integer> minStack;

    public _155_最小栈() {
        xStack = new LinkedList<>();
        minStack = new LinkedList<>();
        minStack.push(Integer.MAX_VALUE);
    }

    public void push(int val) {
        xStack.push(val);
        minStack.push(Math.min(minStack.peek(), val));
    }

    public void pop() {
        xStack.pop();
        minStack.pop();
    }

    public int top() {
        return xStack.peek();
    }

    public int getMin() {
        return minStack.peek();
    }

    public static void main(String[] args) {
        _155_最小栈 stack = new _155_最小栈();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(-71);
        stack.push(5);
        stack.push(6);
        stack.push(-1);
        stack.pop();
        stack.pop();
        System.out.println(stack.getMin());
    }
}
